home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / smb_nativelanman.nasl < prev    next >
Text File  |  2005-01-14  |  5KB  |  186 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # Modified by Georges Dagousset <georges.dagousset@alert4web.com> : 
  5. #   - extract OS and Domain
  6. # Modified by KK Liu 08-25-2004 : 
  7. #   - uses DFS flag in neg retun for Win2K Server detection
  8. #  
  9. # See the Nessus Scripts License for details
  10. #
  11.  
  12. if(description)
  13. {
  14.  script_id(10785);
  15.  script_version ("$Revision: 1.22 $");
  16.  name["english"] = "SMB NativeLanMan";
  17.  name["francais"] = "SMB NativeLanMan";
  18.  
  19.  script_name(english:name["english"],
  20.           francais:name["francais"]);
  21.  
  22.  desc["english"] = "
  23. This plugin attempts to determine what is the
  24. remote native lan manager name (Samba, Windows...).
  25.  
  26. Risk factor : Low";
  27.  
  28.  script_description(english:desc["english"]);
  29.  
  30.  summary["english"] = "Extracts the remote native lan manager name";
  31.  script_summary(english:summary["english"]);
  32.  
  33.  script_category(ACT_GATHER_INFO);
  34.  
  35.  script_copyright(english:"This script is Copyright (C) 2001 Renaud Deraison");
  36.  family["english"] = "Windows";
  37.  script_family(english:family["english"]);
  38.  
  39.  script_dependencies("netbios_name_get.nasl");
  40.  script_require_keys("SMB/name");
  41.  script_require_ports(139,445);
  42.  exit(0);
  43. }
  44.  
  45. include("smb_nt.inc");
  46.  
  47.  
  48.  
  49.  
  50.  
  51. #-------------------------------------------------------------#
  52. # Negociate (pseudo-negociate actually) the protocol          #
  53. # of the session                                              #
  54. #-------------------------------------------------------------#
  55. function my_smb_neg_prot(soc)
  56. {
  57.  neg_prot = raw_string
  58.        (
  59.     
  60.  0x00, 0x00, 0x00, 0xa4,    
  61.  0xff, 0x53, 0x4d, 0x42, 0x72, 0x00, 0x00, 0x00,  
  62.  0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
  63.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
  64.  0x00, 0x00, 0xc7, 0x13, 0x00, 0x00, 0x01, 0x00, 
  65.   0x00, 0x81, 0x00, 0x02, 0x50, 0x43, 0x20, 0x4e,  
  66.  0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x20, 0x50, 
  67.   0x52, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x20, 0x31,  
  68.  0x2e, 0x30, 0x00, 0x02, 0x4d, 0x49, 0x43, 0x52,  
  69.  0x4f, 0x53, 0x4f, 0x46, 0x54, 0x20, 0x4e, 0x45,  
  70.  0x54, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x20, 0x31,  
  71.  0x2e, 0x30, 0x33, 0x00, 0x02, 0x4d, 0x49, 0x43,  
  72.  0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, 0x20, 0x4e,  
  73.  0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x20,  
  74.  0x33, 0x2e, 0x30, 0x00, 0x02, 0x4c, 0x41, 0x4e,  
  75.  0x4d, 0x41, 0x4e, 0x31, 0x2e, 0x30, 0x00, 0x02,  
  76.  0x4c, 0x4d, 0x31, 0x2e, 0x32, 0x58, 0x30, 0x30,  
  77.  0x32, 0x00, 0x02, 0x53, 0x61, 0x6d, 0x62, 0x61,  
  78.  0x00, 0x02, 0x4e, 0x54, 0x20, 0x4c, 0x41, 0x4e,  
  79.  0x4d, 0x41, 0x4e, 0x20, 0x31, 0x2e, 0x30, 0x00,  
  80.  0x02, 0x4e, 0x54, 0x20, 0x4c, 0x4d, 0x20, 0x30,  
  81.  0x2e, 0x31, 0x32, 0x00          
  82.     
  83.      );
  84.      
  85.  send(socket:soc, data:neg_prot);
  86.  r = smb_recv(socket:soc, length:1024);
  87.  if(strlen(r) < 10)return(FALSE);
  88.  if(ord(r[9])==0)return(r);
  89.  else return(FALSE);
  90. }
  91.  
  92. #------------------------------------------------------#
  93. # Set up a session                                     #
  94. #------------------------------------------------------#
  95. function my_smb_session_setup(soc)
  96. {
  97.  
  98.   st = raw_string(0x00,0x00, 0x00, 0x51, 
  99.       0xFF, 0x53, 0x4D, 0x42, 0x73, 0x00, 0x00, 0x00,
  100.       0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  101.       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  102.       0x00, 0xc7, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00,
  103.       0x0d, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x02,
  104.       0x00, 0xc7, 0x13, 0xc3, 0x30, 0x00, 0x00, 0x00,
  105.       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106.       0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x4D, 0x59,
  107.       0x47, 0x52, 0x4F, 0x55, 0x50, 0x00, 0x55, 0x6E,
  108.       0x69, 0x78, 0x00, 0x53, 0x61, 0x6d, 0x62, 0x61,
  109.       0x00);
  110.      
  111.      
  112.   send(socket:soc, data:st);
  113.   r = smb_recv(socket:soc, length:1024); 
  114.   if(strlen(r) < 10)return(FALSE);
  115.   if(ord(r[9])==0)return(r);
  116.   else return(FALSE);
  117. }                      
  118.  
  119.  
  120.  
  121.  
  122. #----------------------------------------------------------------#
  123. #               main()                                 #
  124. #----------------------------------------------------------------#        
  125.  
  126. w2ksrv = raw_string (0xFD,0xF3,0x00,0x00);
  127. #w2k3   = raw_string (0xFD,0xF3,0x01,0x00);
  128.  
  129. name = kb_smb_name();
  130. if(!name)name = "*SMBSERVER";
  131.  
  132. port = kb_smb_transport();
  133.  
  134. if(!get_port_state(port))exit(0);
  135.  
  136. soc = open_sock_tcp(port);
  137. if(!soc)exit(0);
  138. if ( port == 139 ) r = smb_session_request(soc:soc,  remote:name);
  139. else r = "ok";
  140.  
  141.  
  142.   
  143. if(r)
  144.  {
  145.   r = smb_neg_prot(soc:soc);
  146.     
  147.   if(r)
  148.   {
  149.   stub = substr(r, 56, 59); 
  150.  
  151.   r = my_smb_session_setup(soc:soc);
  152.   close(soc);
  153.   if(strlen(r) < 37)exit(0);
  154.   offset = 39 + ord(r[36]) * 2;
  155.   if (offset >= strlen(r))exit(0);
  156.   os = "";
  157.   for (i=offset;ord(r[i]);i=i+1) {
  158.    os = string(os, r[i]); # possible value:'Unix','Windows NT 4.0','Windows 5.0','Windows 5.1'...
  159.   }
  160.   offset = i + 1;
  161.   if(offset >= strlen(r))exit(0); 
  162.   version = "";
  163.   for (i=offset;ord(r[i]);i=i+1) {
  164.    version = string(version , r[i]); # possible value:'Samba x.y.z','Windows 2000 LAN Manager','NT LAN Manager 4.0'...
  165.   }
  166.  
  167.   if (stub >< w2ksrv)
  168.   {
  169.       os = 'Windows 5.0 Server';
  170.   }
  171.   
  172.   offset = i + 1;
  173.   if(offset >= strlen(r))exit(0);
  174.   domain = "";
  175.   for (i=offset;ord(r[i]);i=i+1) {
  176.    domain = string(domain, r[i]);
  177.   }
  178.   report = string("The remote native lan manager is : ", version, "\nThe remote Operating System is : ", os, "\nThe remote SMB Domain Name is : ", domain, "\n");
  179.   set_kb_item(name:"SMB/NativeLanManager", value:version);
  180.   set_kb_item(name:"Host/OS/smb", value:os);
  181.   security_note(port:port, data:report);
  182.   }
  183. }
  184.  
  185.  
  186.